﻿using System;
using System.Collections.Generic;
 
using System.Text;
using System.Runtime.InteropServices;


namespace HDF5
{
    using hid_t = System.Int32;
    using herr_t = System.Int32;
    using hsize_t = System.UInt64;
    using hssize_t = System.Int64;
    using hunsigned = System.UInt32;

    using hbool_t = System.UInt32;
    using htri_t = System.Int32;
    using ssize_t = System.Int64;

    using haddr_t = System.UInt64;

    using uint32_t = System.UInt32;
    using uint64_t = System.UInt64;

    using H5O_msg_crt_idx_t = System.UInt32;

    using size_t = System.UInt32;

    using off_t = System.Int32;

    using H5E_major_t = System.Int32;
    using H5E_minor_t = System.Int32;

    using time_t = System.Int64;
    using H5Z_filter_t = System.Int32;


    #region delegates
    /* Define property list class callback function pointer types */
    public delegate herr_t H5P_cls_create_func_t(hid_t prop_id, IntPtr create_data);
    public delegate herr_t H5P_cls_copy_func_t(hid_t new_prop_id, hid_t old_prop_id, IntPtr copy_data);
    public delegate herr_t H5P_cls_close_func_t(hid_t prop_id, IntPtr close_data);

    /* Define property list callback function pointer types */
    public delegate herr_t H5P_prp_cb1_t([In][MarshalAs(UnmanagedType.LPStr)] string name, size_t size, IntPtr value_data);
    public delegate herr_t H5P_prp_cb2_t(hid_t prop_id, [In][MarshalAs(UnmanagedType.LPStr)] string name, size_t size, IntPtr value_data);
    public delegate herr_t H5P_prp_create_func_t([In][MarshalAs(UnmanagedType.LPStr)] string name, size_t size, IntPtr value_data);
    public delegate herr_t H5P_prp_set_func_t(hid_t prop_id, [In][MarshalAs(UnmanagedType.LPStr)] string name, size_t size, IntPtr value_data);
    public delegate herr_t H5P_prp_get_func_t(hid_t prop_id, [In][MarshalAs(UnmanagedType.LPStr)] string name, size_t size, IntPtr value_data);
    public delegate herr_t H5P_prp_delete_func_t(hid_t prop_id, [In][MarshalAs(UnmanagedType.LPStr)] string name, size_t size, IntPtr value_data);
    public delegate herr_t H5P_prp_copy_func_t([In][MarshalAs(UnmanagedType.LPStr)] string name, size_t size, IntPtr value_data);
    public delegate int H5P_prp_compare_func_t(IntPtr value1, IntPtr value2, size_t size);
    public delegate herr_t H5P_prp_close_func_t([In][MarshalAs(UnmanagedType.LPStr)] string name, size_t size, IntPtr value_data);

    /* Define property list iteration function type */
    public delegate herr_t H5P_iterate_t(hid_t id, [In][MarshalAs(UnmanagedType.LPStr)] string name, IntPtr iter_data);
    #endregion delegates

    public static class H5P
    {

        public static int H5P_DEFAULT = 0;
        /*
         * The library's property list classes
         */
        public static hid_t H5P_ROOT;
        public static hid_t H5P_OBJECT_CREATE;
        public static hid_t H5P_FILE_CREATE;
        public static hid_t H5P_FILE_ACCESS;// 		(H5OPEN H5P_CLS_FILE_ACCESS_g)
        public static hid_t H5P_DATASET_CREATE;//     		(H5OPEN H5P_CLS_DATASET_CREATE_g)
        public static hid_t H5P_DATASET_ACCESS;//     		(H5OPEN H5P_CLS_DATASET_ACCESS_g)
        public static hid_t H5P_DATASET_XFER;//       		(H5OPEN H5P_CLS_DATASET_XFER_g)
        public static hid_t H5P_FILE_MOUNT ;//      		(H5OPEN H5P_CLS_FILE_MOUNT_g)
        public static hid_t H5P_GROUP_CREATE;// 		(H5OPEN H5P_CLS_GROUP_CREATE_g)
        public static hid_t H5P_GROUP_ACCESS;// 		(H5OPEN H5P_CLS_GROUP_ACCESS_g)
        public static hid_t H5P_DATATYPE_CREATE;// 		(H5OPEN H5P_CLS_DATATYPE_CREATE_g)
        public static hid_t H5P_DATATYPE_ACCESS;// 		(H5OPEN H5P_CLS_DATATYPE_ACCESS_g)
        public static hid_t H5P_STRING_CREATE;// 		(H5OPEN H5P_CLS_STRING_CREATE_g)
        public static hid_t H5P_ATTRIBUTE_CREATE;// 		(H5OPEN H5P_CLS_ATTRIBUTE_CREATE_g)
        public static hid_t H5P_OBJECT_COPY;//	 		(H5OPEN H5P_CLS_OBJECT_COPY_g)
        public static hid_t H5P_LINK_CREATE;// 		(H5OPEN H5P_CLS_LINK_CREATE_g)
        public static hid_t H5P_LINK_ACCESS;// 		(H5OPEN H5P_CLS_LINK_ACCESS_g)


        /*
         * The library's default property lists
         */
        public static hid_t H5P_FILE_CREATE_DEFAULT;//		(H5OPEN H5P_LST_FILE_CREATE_g)
        public static hid_t H5P_FILE_ACCESS_DEFAULT;// 	(H5OPEN H5P_LST_FILE_ACCESS_g)
        public static hid_t H5P_DATASET_CREATE_DEFAULT;//  	(H5OPEN H5P_LST_DATASET_CREATE_g)
        public static hid_t H5P_DATASET_ACCESS_DEFAULT;//  	(H5OPEN H5P_LST_DATASET_ACCESS_g)
        public static hid_t H5P_DATASET_XFER_DEFAULT;//   	(H5OPEN H5P_LST_DATASET_XFER_g)
        public static hid_t H5P_FILE_MOUNT_DEFAULT;//       	(H5OPEN H5P_LST_FILE_MOUNT_g)
        public static hid_t H5P_GROUP_CREATE_DEFAULT;//	(H5OPEN H5P_LST_GROUP_CREATE_g)
        public static hid_t H5P_GROUP_ACCESS_DEFAULT;// 	(H5OPEN H5P_LST_GROUP_ACCESS_g)
        public static hid_t H5P_DATATYPE_CREATE_DEFAULT;//	(H5OPEN H5P_LST_DATATYPE_CREATE_g)
        public static hid_t H5P_DATATYPE_ACCESS_DEFAULT;// 	(H5OPEN H5P_LST_DATATYPE_ACCESS_g)
        public static hid_t H5P_ATTRIBUTE_CREATE_DEFAULT;//	(H5OPEN H5P_LST_ATTRIBUTE_CREATE_g)
        public static hid_t H5P_OBJECT_COPY_DEFAULT;//		(H5OPEN H5P_LST_OBJECT_COPY_g)
        public static hid_t H5P_LINK_CREATE_DEFAULT;//		(H5OPEN H5P_LST_LINK_CREATE_g)
        public static hid_t H5P_LINK_ACCESS_DEFAULT;//		(H5OPEN H5P_LST_LINK_ACCESS_g)

        static H5P()
        {
            int status = H5.H5open();
            IntPtr hdl = LoadLibrary("hdf5dll.dll");
            if (hdl == IntPtr.Zero)
            {
                throw new Exception("Failed to load hdf5dll.dll dll library!");
            }

            H5P_ROOT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_ROOT_g"));
            H5P_OBJECT_CREATE = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_OBJECT_CREATE_g"));
            H5P_FILE_CREATE = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_FILE_CREATE_g"));
            H5P_FILE_ACCESS = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_FILE_ACCESS_g"));
            H5P_DATASET_CREATE = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_DATASET_CREATE_g"));
            H5P_DATASET_ACCESS = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_DATASET_ACCESS_g"));
            H5P_DATASET_XFER = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_DATASET_XFER_g"));
            H5P_FILE_MOUNT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_FILE_MOUNT_g"));
            H5P_GROUP_CREATE = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_GROUP_CREATE_g"));
            H5P_GROUP_ACCESS = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_GROUP_ACCESS_g"));
            H5P_DATATYPE_CREATE = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_DATATYPE_CREATE_g"));
            H5P_DATATYPE_ACCESS = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_DATATYPE_ACCESS_g"));
            H5P_STRING_CREATE = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_STRING_CREATE_g"));
            H5P_ATTRIBUTE_CREATE = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_ATTRIBUTE_CREATE_g"));
            H5P_OBJECT_COPY = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_OBJECT_COPY_g"));
            H5P_LINK_CREATE = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_LINK_CREATE_g"));
            H5P_LINK_ACCESS = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_CLS_LINK_ACCESS_g"));

            /*
             * The library's default property lists
             */
            H5P_FILE_CREATE_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_FILE_CREATE_g"));
            H5P_FILE_ACCESS_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_FILE_ACCESS_g"));
            H5P_DATASET_CREATE_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_DATASET_CREATE_g"));
            H5P_DATASET_ACCESS_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_DATASET_ACCESS_g"));
            H5P_DATASET_XFER_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_DATASET_XFER_g"));
            H5P_FILE_MOUNT_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_FILE_MOUNT_g"));
            H5P_GROUP_CREATE_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_GROUP_CREATE_g"));
            H5P_GROUP_ACCESS_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_GROUP_ACCESS_g"));
            H5P_DATATYPE_CREATE_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_DATATYPE_CREATE_g"));
            H5P_DATATYPE_ACCESS_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_DATATYPE_ACCESS_g"));
            H5P_ATTRIBUTE_CREATE_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_ATTRIBUTE_CREATE_g"));
            H5P_OBJECT_COPY_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_OBJECT_COPY_g"));
            H5P_LINK_CREATE_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_LINK_CREATE_g"));
            H5P_LINK_ACCESS_DEFAULT = Marshal.ReadInt32(GetProcAddress(hdl, "H5P_LST_LINK_ACCESS_g"));

            bool isFreed = FreeLibrary(hdl);

        }

#region General Property List Operations
        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern hid_t H5Pcreate(hid_t cls_id ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern H5P_class_t H5Pget_class(hid_t plist )  ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern hid_t H5Pcopy(hid_t plist ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pclose(hid_t plist ) ;

#endregion General Property List Operations

#region Generic Property List Functions
        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern hid_t H5Pcreate_class( hid_t parent_class, [In][MarshalAs(UnmanagedType.LPStr)] string name,
        //    H5P_cls_create_func_t create, IntPtr create_data, H5P_cls_copy_func_t copy, 
        //    IntPtr copy_data, H5P_cls_close_func_t close, IntPtr close_data ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pregister( hid_t class, const char * name, size_t size, void * default, H5P_prp_create_func_t create, H5P_prp_set_func_t set, H5P_prp_get_func_t get, H5P_prp_delete_func_t delete, H5P_prp_copy_func_t copy, H5P_prp_close_func_t close )  ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pregister( hid_t class, const char * name, size_t size, void * default, H5P_prp_create_func_t create, H5P_prp_set_func_t set, H5P_prp_get_func_t get, H5P_prp_delete_func_t delete, H5P_prp_copy_func_t copy, H5P_prp_compare_func_t compare, H5P_prp_close_func_t close );

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pregister2( hid_t class, const char * name, size_t size, void * default, H5P_prp_create_func_t create, H5P_prp_set_func_t set, H5P_prp_get_func_t get, H5P_prp_delete_func_t delete, H5P_prp_copy_func_t copy, H5P_prp_compare_func_t compare, H5P_prp_close_func_t close ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pinsert( hid_t plid, const char *name, size_t size, void *value, H5P_prp_set_func_t set, H5P_prp_get_func_t get, H5P_prp_delete_func_t delete, H5P_prp_copy_func_t copy, H5P_prp_close_func_t close )  ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pinsert( hid_t plid, const char *name, size_t size, void *value, H5P_prp_set_func_t set, H5P_prp_get_func_t get, H5P_prp_delete_func_t delete, H5P_prp_copy_func_t copy, H5P_prp_compare_func_t compare, H5P_prp_close_func_t close );

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pinsert2( hid_t plid, const char *name, size_t size, void *value, H5P_prp_set_func_t set, H5P_prp_get_func_t get, H5P_prp_delete_func_t delete, H5P_prp_copy_func_t copy, H5P_prp_compare_func_t compare, H5P_prp_close_func_t close ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset( hid_t plid, [In][MarshalAs(UnmanagedType.LPStr)] string name, IntPtr value ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern htri_t H5Pexist( hid_t id, [In][MarshalAs(UnmanagedType.LPStr)] string name ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern int H5Pget_size( hid_t id, [In][MarshalAs(UnmanagedType.LPStr)] string name, out size_t size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern int H5Pget_nprops( hid_t id, out size_t nprops ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern string H5Pget_class_name( hid_t pcid ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern hid_t H5Pget_class_parent( hid_t pcid ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern htri_t H5Pisa_class( hid_t plist, hid_t pclass ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget( hid_t plid, [In][MarshalAs(UnmanagedType.LPStr)] string name, IntPtr value ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern htri_t H5Pequal( hid_t id1, hid_t id2 ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern int H5Piterate( hid_t id, int * idx, H5P_iterate_t iter_func, void * iter_data ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pcopy_prop( hid_t dst_id, hid_t src_id, [In][MarshalAs(UnmanagedType.LPStr)] string name ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Premove( hid_t plid, [In][MarshalAs(UnmanagedType.LPStr)] string name ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Punregister( H5P_class_t class, [In][MarshalAs(UnmanagedType.LPStr)] string name ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pclose_class( hid_t class_id ) ;

#endregion Generic Property List Functions

#region Link Creation Properties
        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_char_encoding( hid_t plist_id, H5T_cset_t encoding ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_char_encoding( hid_t plist_id, H5T_cset_t encoding ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_create_intermediate_group( hid_t lcpl_id, hunsigned crt_intermed_group ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_create_intermediate_group( hid_t lcpl_id, out hunsigned crt_intermed_group ) ;

#endregion Link Creation Properties

#region Link Access Properties
        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_nlinks( hid_t lapl_id, size_t nlinks ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_nlinks( hid_t lapl_id, out size_t nlinks ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_elink_cb( hid_t lapl_id, H5L_elink_traverse_t func, IntPtr op_data ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_elink_cb( hid_t lapl_id, H5L_elink_traverse_t *func, void **op_data )  ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_elink_prefix( hid_t lapl_id, [In][MarshalAs(UnmanagedType.LPStr)] string prefix ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern ssize_t H5Pget_elink_prefix( hid_t lapl_id, StringBuilder prefix, size_t size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_elink_fapl( hid_t lapl_id, hid_t fapl_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern hid_t H5Pget_elink_fapl( hid_t lapl_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_elink_acc_flags( hid_t lapl_id, hunsigned flags ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_elink_acc_flags( hid_t lapl_id, out hunsigned flags ) ;

#endregion Link Access Properties

#region Object Copy and Object Creation Properties
        //already defined
        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_create_intermediate_group( hid_t lcpl_id, hunsigned crt_intermed_group )  ;

        //already defined
        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_create_intermediate_group( hid_t lcpl_id, out hunsigned crt_intermed_group ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_copy_object( hid_t ocp_plist_id, hunsigned copy_options ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_copy_object( hid_t ocp_plist_id, out hunsigned copy_options ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_attr_phase_change( hid_t ocpl_id, hunsigned max_compact, hunsigned min_dense ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_attr_phase_change( hid_t ocpl_id, out hunsigned max_compact, out hunsigned min_dense ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_attr_creation_order( hid_t ocpl_id, hunsigned crt_order_flags ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_attr_creation_order( hid_t ocpl_id, out hunsigned crt_order_flags ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_obj_track_times( hid_t ocpl_id, hbool_t track_times ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_obj_track_times( hid_t ocpl_id, out hbool_t track_times ) ;

#endregion Object Copy and Object Creation Properties

#region String Properties
        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_char_encoding( hid_t plist_id, H5T_cset_t encoding ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_char_encoding( hid_t plist_id, H5T_cset_t encoding ) ;

#endregion String Properties


#region Group Creation Properties
        //already defined
        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_create_intermediate_group( hid_t lcpl_id, hunsigned crt_intermed_group ) ;

        //already defined
        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_create_intermediate_group( hid_t lcpl_id, out hunsigned crt_intermed_group ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_local_heap_size_hint( hid_t gcpl_id, size_t size_hint ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_local_heap_size_hint( hid_t gcpl_id, out size_t size_hint ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_link_creation_order( hid_t gcpl_id, hunsigned crt_order_flags ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_link_creation_order( hid_t gcpl_id, out hunsigned crt_order_flags ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_est_link_info( hid_t gcpl_id, hunsigned est_num_entries, hunsigned est_name_len ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_est_link_info( hid_t gcpl_id, out hunsigned est_num_entries,out hunsigned est_name_len ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_link_phase_change( hid_t gcpl_id, hunsigned max_compact, hunsigned min_dense ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_link_phase_change( hid_t gcpl_id, out hunsigned max_compact,out hunsigned min_dense ) ;

#endregion Group Creation Properties

#region File Creation Properties
        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_version(hid_t plist, out hunsigned  super,out hunsigned  freelist, out hunsigned stab,out hunsigned  shhdr ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_userblock(hid_t plist, hsize_t size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_userblock(hid_t plist, out hsize_t  size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_sizes(hid_t plist, size_t sizeof_addr, size_t sizeof_size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_sizes(hid_t plist, out size_t  sizeof_addr,out size_t  sizeof_size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_sym_k(hid_t plist, hunsigned ik, hunsigned lk ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_sym_k(hid_t plist, out hunsigned  ik,out hunsigned  lk ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_istore_k(hid_t plist, hunsigned ik ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_istore_k(hid_t plist, out hunsigned  ik ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_shared_mesg_nindexes( hid_t plist_id, hunsigned nindexes ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_shared_mesg_nindexes( hid_t fcpl_id, out hunsigned nindexes ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_shared_mesg_index( hid_t fcpl_id, hunsigned index_num, hunsigned mesg_type_flags, hunsigned min_mesg_size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_shared_mesg_index( hid_t fcpl_id, hunsigned index_num, out hunsigned mesg_type_flags, out hunsigned min_mesg_size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_shared_mesg_phase_change( hid_t fcpl_id, hunsigned max_list, hunsigned min_btree ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_shared_mesg_phase_change( hid_t fcpl_id, out hunsigned max_list,out hunsigned min_btree ) ;

#endregion File Creation Properties

#region File Access Properties
        //already defined
        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_driver( hid_t plist_id, hid_t new_driver_id, IntPtr new_driver_info ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern void *H5Pget_driver_info( hid_t plist_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fclose_degree(hid_t fapl_id, H5F_close_degree_t fc_degree) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_fclose_degree(hid_t fapl_id, out H5F_close_degree_t fc_degree) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fapl_core( hid_t fapl_id, size_t increment, hbool_t backing_store ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_fapl_core( hid_t fapl_id, out size_t increment, out hbool_t backing_store ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fapl_direct( hid_t fapl_id, size_t alignment, size_t block_size, size_t cbuf_size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_fapl_direct( hid_t fapl_id, out size_t alignment,out size_t block_size,out size_t cbuf_size )  ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fapl_family ( hid_t fapl_id, hsize_t memb_size, hid_t memb_fapl_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_fapl_family ( hid_t fapl_id, out hsize_t memb_size,out hid_t memb_fapl_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_family_offset ( hid_t fapl_id, hsize_t offset ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_family_offset ( hid_t fapl_id, out hsize_t offset ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fapl_log( hid_t fapl_id, [In][MarshalAs(UnmanagedType.LPStr)] string logfile, hunsigned  flags, size_t buf_size ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_fapl_mpio( hid_t fapl_id, MPI_Comm comm, MPI_Info info ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_fapl_mpio( hid_t fapl_id, MPI_Comm *comm, MPI_Info *info ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_fapl_mpiposix( hid_t fapl_id, MPI_Comm comm, hbool_t use_gpfs_hints ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_fapl_mpiposix( hid_t fapl_id, MPI_Comm *comm, hbool_t *use_gpfs_hints ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_fapl_multi( hid_t fapl_id, const H5FD_mem_t *memb_map, const hid_t *memb_fapl, const char * const *memb_name, const haddr_t *memb_addr, hbool_t relax ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_fapl_multi( hid_t fapl_id, const H5FD_mem_t *memb_map, const hid_t *memb_fapl, const char **memb_name, const haddr_t *memb_addr, hbool_t *relax )  ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_multi_type ( hid_t fapl_id, H5FD_mem_t type ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_multi_type ( hid_t fapl_id, H5FD_mem_t *type ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fapl_split( hid_t fapl_id, [In][MarshalAs(UnmanagedType.LPStr)] string meta_ext, hid_t meta_plist_id, [In][MarshalAs(UnmanagedType.LPStr)] string raw_ext, hid_t raw_plist_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fapl_sec2( hid_t fapl_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fapl_stdio( hid_t fapl_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fapl_windows( hid_t fapl_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_driver( hid_t plist_id, hid_t new_driver_id, IntPtr new_driver_info ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern hid_t H5Pget_driver( hid_t plist_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern IntPtr H5Pget_driver_info( hid_t plist_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_meta_block_size( hid_t fapl_id, hsize_t size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_meta_block_size( hid_t fapl_id, out hsize_t size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_sieve_buf_size( hid_t fapl_id, size_t size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_sieve_buf_size( hid_t fapl_id, out size_t size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_alignment(hid_t plist, hsize_t threshold, hsize_t alignment ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_alignment(hid_t plist, out hsize_t threshold,out hsize_t alignment ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_cache( hid_t plist_id, int mdc_nelmts, size_t rdcc_nelmts, size_t rdcc_nbytes, double rdcc_w0 ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_cache(hid_t plist_id, out int mdc_nelmts, out size_t rdcc_nelmts,out size_t rdcc_nbytes, out double rdcc_w0 ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_mdc_config(hid_t plist_id, H5AC_cache_config_t *config_ptr) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_mdc_config(hid_t plist_id, H5AC_cache_config_t *config_ptr) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_gc_reference(hid_t plist, hunsigned gc_ref ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_gc_references(hid_t plist, out hunsigned gc_ref ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_small_data_block_size(hid_t fapl_id, hsize_t size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_small_data_block_size(hid_t fapl_id, out hsize_t size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_libver_bounds( hid_t fapl_id, H5F_libver_t low, H5F_libver_t high ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_libver_bounds( hid_t fapl_id, out H5F_libver_t low, out H5F_libver_t high ) ;

#endregion File Access Properties

#region Dataset Creation Properties
        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_layout(hid_t plist, H5D_layout_t layout ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern H5D_layout_t H5Pget_layout(hid_t plist) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_chunk(hid_t plist, int ndims, [In] hsize_t[]  dim ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern int H5Pget_chunk(hid_t plist, int max_ndims, [In,Out]hsize_t[]  dims ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_deflate( hid_t plist_id, uint level ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fill_value(hid_t plist_id, hid_t type_id, IntPtr value ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_fill_value(hid_t plist_id, hid_t type_id, IntPtr value ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pfill_value_defined(hid_t plist_id, out H5D_fill_value_t status ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fill_time(hid_t plist_id, H5D_fill_time_t fill_time ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_fill_time(hid_t plist_id, out H5D_fill_time_t fill_time ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_alloc_time(hid_t plist_id, H5D_alloc_time_t alloc_time ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_alloc_time(hid_t plist_id, out H5D_alloc_time_t alloc_time ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_filter(hid_t plist_id, H5Z_filter_t filter_id, hunsigned  flags, size_t cd_nelmts, hunsigned[]  cd_values ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern htri_t H5Pall_filters_avail( hid_t plist_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern int H5Pget_nfilters(hid_t plist) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern H5Z_filter_t H5Pget_filter( hid_t plist, hunsigned idx, out hunsigned flags, out size_t cd_nelmts, out hunsigned cd_values, size_t namelen, StringBuilder name ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern H5Z_filter_t H5Pget_filter( hid_t plist_id, hunsigned idx, out hunsigned flags, out size_t cd_nelmts, hunsigned[] cd_values, size_t namelen, StringBuilder name, out hunsigned filter_config );

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern H5Z_filter_t H5Pget_filter2( hid_t plist_id, hunsigned idx, out hunsigned flags, out size_t cd_nelmts, hunsigned[] cd_values, size_t namelen, StringBuilder name, out hunsigned filter_config ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_filter_by_id( hid_t plist_id, H5Z_filter_t filter_id, out hunsigned flags,out size_t cd_nelmts, hunsigned[] cd_alues, size_t namelen, StringBuilder name ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_filter_by_id( hid_t plist_id, H5Z_filter_t filter_id, out hunsigned flags, out size_t cd_nelmts, hunsigned[]  cd_values, size_t namelen, StringBuilder name, out hunsigned filter_config );

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_filter_by_id2( hid_t plist_id, H5Z_filter_t filter_id, out hunsigned flags, out size_t cd_nelmts, hunsigned[] cd_values, size_t namelen, StringBuilder name, out hunsigned filter_config ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pmodify_filter( hid_t plist_id, H5Z_filter_t filter_id, hunsigned flags, size_t cd_nelmts, hunsigned[] cd_values ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Premove_filter( hid_t plist_id, H5Z_filter_t filter ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_fletcher32( hid_t plist_id ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_nbit(hid_t plist_id) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_scaleoffset( hid_t plist_id, H5Z_SO_scale_type_t scale_type, int scale_factor ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_shuffle(hid_t plist_id) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_szip(hid_t plist, hunsigned  options_mask, hunsigned pixels_per_block) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_external(hid_t plist, [In][MarshalAs(UnmanagedType.LPStr)] string name, off_t offset, hsize_t size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern int H5Pget_external_count(hid_t plist ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_external(hid_t plist, hunsigned idx, size_t name_size, StringBuilder name, out off_t offset,out hsize_t size ) ;

#endregion Dataset Creation Properties

#region Dataset Access, Memory, and Transfer Properties

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_buffer(hid_t plist, hsize_t size, IntPtr tconv, IntPtr bkg ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern hsize_t H5Pget_buffer(hid_t plist, IntPtr[] tconv, IntPtr[] bkg ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_chunk_cache( hid_t dapl_id, size_t rdcc_nslots, size_t rdcc_nbytes, double rdcc_w0 ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_chunk_cache( hid_t dapl_id, out size_t rdcc_nslots, out size_t rdcc_nbytes, out double rdcc_w0 ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_edc_check( hid_t plist, H5Z_EDC_t check ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern H5Z_EDC_t H5Pget_edc_check(hid_t plist) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_filter_callback(hid_t plist, H5Z_filter_func_t func, IntPtr op_data) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_data_transform (hid_t plist_id, [In][MarshalAs(UnmanagedType.LPStr)] string expression) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern ssize_t H5Pget_data_transform (hid_t plist_id, StringBuilder expression, size_t size) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_type_conv_cb( hid_t plist, H5T_conv_except_func_t func, void *op_data) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_type_conv_cb(hid_t plist, H5T_conv_except_func_t *func, void **op_data) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_hyper_vector_size(hid_t dxpl_id, size_t vector_size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_hyper_vector_size(hid_t dxpl_id, out size_t vector_size ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_btree_ratios(hid_t plist, double left, double middle, double right ) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pget_btree_ratios(hid_t plist, out double left,out double middle,out double right ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_vlen_mem_manager(hid_t plist, H5MM_allocate_t alloc, void *alloc_info, H5MM_free_t free, void *free_info ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_vlen_mem_manager(hid_t plist, H5MM_allocate_t *alloc, void **alloc_info, H5MM_free_t *free, void **free_info ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern     herr_t H5Pset_dxpl_mpio( hid_t dxpl_id, H5FD_mpio_xfer_t xfer_mode ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_dxpl_mpio_chunk_opt (hid_t dxpl_id, H5FD_mpio_chunk_opt_t opt_mode) ;

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_dxpl_mpio_chunk_opt_num (hid_t dxpl_id, hunsigned num_chunk_per_proc);

        [DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        public static extern herr_t H5Pset_dxpl_mpio_chunk_opt_ratio (hid_t dxpl_id, hunsigned percent_proc_per_chunk) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_dxpl_mpio_collective_opt (hid_t dxpl_id, H5FD_mpio_collective_opt_t opt_mode) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_dxpl_mpio( hid_t dxpl_id, H5FD_mpio_xfer_t *xfer_mode ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pset_dxpl_multi( hid_t dxpl_id, const hid_t *memb_dxpl ) ;

        //[DllImport("hdf5dll.dll",CharSet=CharSet.Ansi)]
        //public static extern herr_t H5Pget_dxpl_multi( hid_t dxpl_id, const hid_t *memb_dxpl ) ;
#endregion Dataset Access, Memory, and Transfer Properties

        #region kernel32 functions
        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern IntPtr GetProcAddress(IntPtr hModule, string procName);

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern IntPtr LoadLibrary(string lpszLib);

        [DllImport("kernel32", SetLastError = true)]
        private static extern bool FreeLibrary(IntPtr handle);
        #endregion kernel32 functions
    }
}
